﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;


namespace FrbaCommerce
{

    public partial class FormMenuPrincipal : Form
    {

        private Gets_and_Sets.Cliente_getset cli;
        private Gets_and_Sets.Empresa_getset emp;
        private int usuario;
        private int rolUsuarioLogueado;
        private int rolCliente = 3;
        private int rolEmpresa = 2;


        public FormMenuPrincipal()
        {
            InitializeComponent();
            inicializarBotones();
            button1.Visible = true;
            buttonRegistro.Visible = true;
            label2.Visible = true;


        }

        private void inicializarBotones()
        {
            linkLabel1.Visible = false;
            label3.Visible = false;
            buttonCambiarPW.Visible = false;
            buttonCerrarSesion.Visible = false;
            button1.Visible = false;
            buttonRegistro.Visible = false;
            label2.Visible = false;
            buttonABMClientes.Visible = false;
            buttonABMEmpresas.Visible = false;
            buttonABMRol.Visible = false;
            buttonABMRubros.Visible = false;
            buttonABMVisibilidad.Visible = false;
            buttonCalificar.Visible = false;
            buttonComprarOfertar.Visible = false;
            buttonEditarPublic.Visible = false;
            buttonFacturar.Visible = false;
            buttonGenerarPublic.Visible = false;
            buttonGestionarPreg.Visible = false;
            buttonHistorial.Visible = false;
            buttonListado.Visible = false; 
        }

        public void procesarLogin(string item, string nombreUsuario, Form menuAnterior) 
        { 
            //Aca trabajamos con los datos que nos devuelve el Login, habilitamos y mostramos las opciones
            //Hay que ver las funcionalidades que tiene cada uno para habilitar las opciones

            //Oculto todos los botones.

            inicializarBotones();
            InitializeComponent();

            string consulta = "SELECT func_nombre, usuario_id from [Monkey_Coders].Funcionalidades, [Monkey_Coders].rol_funcionalidad,"
               + "[Monkey_Coders].usuario_rol, [Monkey_Coders].Usuarios"

            + " WHERE usr_name = '" + nombreUsuario + "' AND ur_user_id = usuario_id"
            + " AND ur_rol_id = rf_rol_id AND rf_func_id = func_id";

            using (SqlConnection conn = Program.obtenerConexion())
            {

                SqlCommand cmd = new SqlCommand(consulta, conn);

                SqlDataReader lector = cmd.ExecuteReader();

                //antes de habilitar las funcionalidades para el usuario logueado, desabilito el registro de usuario y el logueo, sea cual fuere el usuario a loguearse.
                //el registro de usuario solo debe estar habilitado si el usuario todavia no esta logueado
                button1.Visible = false;
                buttonRegistro.Visible = false;
                label2.Visible = false;
                buttonCerrarSesion.Visible = true;
                label3.Visible = true;

                if (lector.HasRows)
                {
                    while (lector.Read())
                    {
                        analizarLectura((string)lector["func_nombre"]);
                        usuario = Convert.ToInt32(lector["usuario_id"]);
                        
                    }
                }

                linkLabel1.Visible = true;
                this.rolUsuarioLogueado = AccessData.adRol.obtenerRolusuario(usuario);

                if (rolUsuarioLogueado == rolCliente)
                {
                    cli = AccessData.adCliente.buscarCliente(usuario);
                    linkLabel1.Text = cli.Apellido + " " + cli.Nombre;

                }else
                    if (rolUsuarioLogueado == rolEmpresa)
                    {
                        emp = AccessData.adEmpresa.buscarEmpresa(usuario);
                        linkLabel1.Text = emp.RazonSocial;

                    }
                    else
                    {
                        linkLabel1.Text = "Administrador";
                    }

                try
                {
                   
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                finally
                {
                    // cerramos la conexion
                    if (conn.State != ConnectionState.Closed)
                        conn.Close();
                    // destruimos la conexion
                    conn.Dispose();
                }
            }

            buttonCambiarPW.Visible = true;
      }


        private void analizarLectura(string nombreDeFuncionalidad){

            switch (nombreDeFuncionalidad)
            {
                case "ABM Rol":
                    buttonABMRol.Visible = true;
                    break;

                case "Registro de Usuario":
                    buttonRegistro.Visible = true;
                    break;

                case "ABM Clientes":
                    buttonABMClientes.Visible = true;
                    break;

                case "ABM Empresas":
                    buttonABMEmpresas.Visible = true;
                    break;

                case "ABM Rubros":
                    buttonABMRubros.Visible = true;
                    break;

                case "ABM Visibilidad de Publicación":
                    buttonABMVisibilidad.Visible = true;
                    break;

                case "Generar Publicación":
                    buttonGenerarPublic.Visible = true;
                    break;

                case "Editar Publicación":
                    buttonEditarPublic.Visible = true;
                    break;

                case "Gestión de Preguntas":
                    buttonGestionarPreg.Visible = true;
                    break;

                case "Comprar/Ofertar":
                    buttonComprarOfertar.Visible = true;
                    break;

                case "Calificar al vendedor":
                    buttonCalificar.Visible = true;
                    break;

                case "Historial de Cliente":
                    buttonHistorial.Visible = true;
                    break;

                case "Facturar Publicaciones":
                    buttonFacturar.Visible = true;
                    break;

                case "Listado estadistico":
                    buttonListado.Visible = true;
                    break;
            }
        }


        private void button1_Click(object sender, EventArgs e)
        {
            Form login = new Login.FormLogin(this);
            login.Show();
        }

        private void buttonABMClientes_Click(object sender, EventArgs e)
        {
            Form clientes = new Abm_Cliente.FormABMCliente(usuario);
            clientes.Show();

        }

        private void buttonRegistro_Click(object sender, EventArgs e)
        {
            Form registro = new Registro_de_Usuario.FormRegistroUsuario();
            registro.Show();
        }

        private void buttonABMRubros_Click(object sender, EventArgs e)
        {
            Form rubro = new Abm_Rubro.FormABMRubro();
            rubro.Show();
        }

        private void buttonABMVisibilidad_Click(object sender, EventArgs e)
        {
            Form visibilidad = new Abm_Visibilidad.ABMVisibilidad();
            visibilidad.Show();

        }

        public void desactivarLogin()
        {
            button1.Enabled = false;
        }

        private void buttonABMRol_Click(object sender, EventArgs e)
        {
            Form roles = new ABM_Rol.ABMRol();
            roles.Show();
        }

        private void buttonGenerarPublic_Click(object sender, EventArgs e)
        {
            Form generar = new Generar_Publicacion.GenerarPublicacion(usuario);
            generar.Show();
        }

        private void buttonEditarPublic_Click(object sender, EventArgs e)
        {
            Form editarPublicacion = new Editar_Publicacion.Listado(usuario);
            editarPublicacion.Show();
        }

        private void buttonComprarOfertar_Click(object sender, EventArgs e)
        {
                Form comprarOfertar = new Comprar_Ofertar.ListadoPublicaciones(usuario);
                comprarOfertar.Show();
        }

        private void buttonABMEmpresas_Click(object sender, EventArgs e)
        {
            Form empresas = new Abm_Empresa.ABM_Empresa(usuario);
            empresas.Show();
        }

        private void buttonListado_Click(object sender, EventArgs e)
        {
            Form listado = new Listado_Estadistico.Listado(usuario);
            listado.Show();
        }

        private void buttonHistorial_Click(object sender, EventArgs e)
        {
            Form historial = new Historial_Cliente.FormHistorial(usuario);
            historial.Show();
        }

        private void buttonGestionarPreg_Click(object sender, EventArgs e)
        {
            Form preguntas = new Gestion_de_Preguntas.GestionPreguntas(usuario);
            preguntas.Show();
        }

        private void buttonFacturar_Click(object sender, EventArgs e)
        {
            Form facturacion = new Facturar_Publicaciones.FormListadoFact(usuario);
            facturacion.Show();
        }

        private void buttonCambiarPW_Click(object sender, EventArgs e)
        {
            Form cambiarPW = new Cambiar_Password.FormCambiarPW(usuario);
            cambiarPW.Show();
        }

        private void buttonCalificar_Click(object sender, EventArgs e)
        {
            Form calificar = new Calificar_Vendedor.ListadoCompras(usuario,true);
            calificar.Show();
        }

        private void FormMenuPrincipal_Load(object sender, EventArgs e)
        {
            labelFecha.Text = "Hoy es: " + Program.FechaActual.ToShortDateString();
        }

        private void labelFecha_Click(object sender, EventArgs e)
        {

        }

        private void buttonCerrarSesion_Click(object sender, EventArgs e)
        {
            
            inicializarBotones();
            button1.Visible = true;
            buttonRegistro.Visible = true;
            label2.Visible = true;
            
            
            
        }


        /*Esta es funcionalidad nueva, pero por miedo a que la correccion nos digan 
         * que no cumple con los requisitos del TP no se entrega.
        Se trata de lo siguiente
         * 
         * 
         * Funcionalidad: Haciendo Click en este Label, un usuario normal, 
         * puede modificar sus datos personales, 
         * (se accede al formulario de modificación de Cliente o Empresa, 
         * según el usuario logueado y el mismo puede cambiar sus datos personales, 
         * sin alterar los datos del sistema predefinidos (nombre de usuario,  Estado del Usuario). 
         * 
         * 
         * 
        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {

            if (rolUsuarioLogueado == rolCliente)
            {
                int idCliente = AccessData.adUsuario.obtenerUsuarioId(cli.Dni);
                Abm_Cliente.ModificacionCliente mod = new Abm_Cliente.ModificacionCliente(idCliente, usuario);
                mod.Show();

            }
            else
                if (rolUsuarioLogueado == rolEmpresa)
                {
                    int idEmpresa = AccessData.adUsuario.obtenerUsuarioId(emp.Cuit);
                    Abm_Empresa.ModificacionEmpresa mod = new Abm_Empresa.ModificacionEmpresa(idEmpresa, usuario);
                    mod.Show();
                }
                else
                {
                    linkLabel1.Text = "Administrador";
                    linkLabel1.LinkColor = Color.Black;
                }
        }*/

    }
}
